package com.gm.wj.controller;

import com.gm.wj.result.Result;
import com.gm.wj.result.ResultFactory;
import com.gm.wj.service.SysOrderFlowService;
import com.gm.wj.util.SysLoging;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: wj
 * @description:
 * @author: Huang_shengjun
 * @create: 2020-09-01 21:17
 **/
@Log4j2
@RestController
@Api(tags = "订单流水相关接口")
public class SysOrderController {

    @Autowired
    SysOrderFlowService sysOrderFlowService;

    // 选择支付方式，生成订单
    @PostMapping("api/admin/orderadd/{id}/{status}")
    @SysLoging("生成支付订单信息") //根据SysLoging的注解信息，进行方法的注释
    @ApiOperation("生成支付订单信息的接口")
    public Result saveOrder(@PathVariable("id") int id,@PathVariable("status") int status) {
        Map<String, String> map;
        // 获取操作用户名
        String username = (String) SecurityUtils.getSubject().getPrincipal();
        try{
            map = sysOrderFlowService.addOrder(id,username,status);
            if (map.get("code").equals("200")){
                return ResultFactory.buildSuccessResult("生成订单成功，请尽快前往订单管理支付，逾期订单将会失效！",null);
            } else {
                return ResultFactory.buildFailResult("执行不成功，" + map.get("message"));
            }
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 列表
    @PostMapping("/api/admin/order/{size}/{page}")
    @ApiOperation("查询订单列表信息的接口")
    @SysLoging("查询订单列表信息") //根据SysLoging的注解信息，进行方法的注释
    public Result listOrder(@PathVariable("size") int size, @PathVariable("page") int page, String queryKey1,String queryKey2, String queryKey3) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysOrderFlowService.list(page - 1, size,queryKey1,queryKey2,queryKey3));
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 列表
    @PostMapping("/api/admin/flow/{size}/{page}")
    @ApiOperation("查询流水列表信息的接口")
    @SysLoging("查询流水列表信息")
    public Result listflow(@PathVariable("size") int size, @PathVariable("page") int page, String queryKey1) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysOrderFlowService.Flowlist(page - 1, size, queryKey1));
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 根据条件查询用户列表
    @PostMapping("/api/admin/order/findByQueryKey")
    @ApiOperation("根据条件查询订单列表的接口")
    @SysLoging("根据条件查询订单列表")
    public Result listByQueryKey(String queryKey1,String queryKey2, String queryKey3, String username) {
        try{
            if (username == "admin"){
                return ResultFactory.buildSuccessResult("查询成功",sysOrderFlowService.listByQueryKey(queryKey1,queryKey2,queryKey3,null));
            }else {
                return ResultFactory.buildSuccessResult("查询成功",sysOrderFlowService.listByQueryKey(queryKey1,queryKey2,queryKey3,username));
            }
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());

        }
    }

}
